import request from '@/utils/request'

/**
 * 获取LinkedIn联系人数据列表
 * @param {Object} params - 查询参数
 * @returns {Promise} - 返回Promise对象
 */
export function getLinkedinContacts(params) {
  return request({
    url: '/linkedin/list',
    method: 'post',
    data: params,
    // 添加超时时间
    timeout: 30000
  }).then(response => {
    // 直接返回响应，让组件处理数据结构
    return response;
  }).catch(error => {
    throw error; // 重新抛出异常，让调用方处理
  });
}

/**
 * 获取LinkedIn联系人数量
 * @param {Object} params - 查询参数
 * @returns {Promise} - 返回Promise对象
 */
export function getLinkedinContactsCount(params) {
  return request({
    url: '/linkedin/count',
    method: 'post',
    data: params,
    timeout: 30000
  });
}

/**
 * 获取用户余额信息
 * @returns {Promise} 返回Promise对象
 */
export function getUserBalanceInfo() {
  return request({
    url: '/api/balance/info',
    method: 'get'
  })
}

/**
 * 获取LinkedIn联系人详情
 * @param {Number} id - 联系人ID
 * @returns {Promise} - 返回Promise对象
 */
export function getLinkedinContactDetail(id) {
  return request({
    url: `/linkedin/detail/${id}`,
    method: 'get'
  })
}

/**
 * 导出LinkedIn联系人数据
 * @param {Object} params - 导出参数
 * @returns {Promise} - 返回Promise对象
 */
export function exportLinkedinContacts(params) {
  // 分离参数，exportCount、selectedFields和language作为URL参数，其他参数放在请求体
  const exportCount = params.exportCount;
  const selectedFields = params.selectedFields;
  const language = params.language;
  const { exportCount: _, selectedFields: __, language: ___, ...bodyParams } = params;

  // 构建URL参数
  let url = `/linkedin/export?exportCount=${exportCount}`;
  if (selectedFields && selectedFields.trim() !== '') {
    url += `&selectedFields=${encodeURIComponent(selectedFields)}`;
  }
  if (language && language.trim() !== '') {
    url += `&language=${encodeURIComponent(language)}`;
  }

  // console.log('导出请求URL:', url);
  // console.log('导出请求体参数:', bodyParams);
  // console.log('选中字段:', selectedFields);
  // console.log('导出语言:', language);

  return request({
    url: url,
    method: 'post',
    data: bodyParams,
    responseType: 'blob',  // 设置响应类型为blob
    headers: {
      'Content-Type': 'application/json',
      'Accept': 'application/json, application/octet-stream, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      'Connection': 'keep-alive'
    },
    timeout: 600000,  // 增加到10分钟超时
    retry: 1,  // 添加重试机制
    retryDelay: 2000,  // 增加重试延迟到2秒
    meta: {
      isExport: true  // 标记为导出请求
    }
  });
}

/**
 * 添加联系人到我的线索
 * @param {Number} id - 联系人ID
 * @param {Object} data - 线索数据（包含备注）
 * @returns {Promise} - 返回Promise对象
 */
export function addToMyLeads(id, data) {
  return request({
    url: `/linkedin/add-to-leads/${id}`,
    method: 'post',
    data
  })
}

/**
 * 批量添加联系人到我的线索
 * @param {Object} data - 包含ids数组和备注的对象
 * @returns {Promise} - 返回Promise对象
 */
export function batchAddToMyLeads(data) {
  return request({
    url: '/linkedin/batch-add-to-leads',
    method: 'post',
    data
  })
}

/**
 * 获取LinkedIn联系人完整敏感信息
 * @param {String} mid MySQL表ID
 * @param {String} mt MySQL表名
 * @param {string} fieldName 需要获取的字段名称
 * @returns {Promise} 返回Promise对象
 */
export function getLinkedinFullContactInfo(mid, mt, fieldName) {
  return request({
    url: `/linkedin/contact`,
    method: 'get',
    params: {
      mid: mid,
      mt: mt,
      fieldName: fieldName
    }
  })
}

/**
 * 从ES中查询公司名称数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchCompanyNamesFromES(keyword) {
  return request({
    url: '/linkedin/es/companies',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 从ES中查询职位数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchJobTitlesFromES(keyword) {
  return request({
    url: '/linkedin/es/jobtitles',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 从ES中查询行业数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchIndustriesFromES(keyword) {
  return request({
    url: '/linkedin/es/industries',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 从ES中查询国家/地区数据
 * @param {String} keyword 搜索关键词
 * @returns {Promise} 返回Promise对象
 */
export function searchLocationsFromES(keyword) {
  return request({
    url: '/linkedin/es/locations',
    method: 'get',
    params: { keyword }
  });
}